package com.wolfeyes;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;


/**
* @see Talk is cheap, Show me the code. -- Linus Torvalds
* @title 后台应用程序入口
* @author yanyljava
* @email yanyljava@qq.com
* @create 2022-01-13 21:25
*/
//Servlet组件扫描，自动扫描带有(@WebServlet, @WebFilter, and @WebListener)注解的类，完成注册
@ServletComponentScan
//设置使用spring注解的其他组件类所在的jar包，并自动注册bean,并保证@Required,@Autowired的属性被注入
@ComponentScan(basePackages = {"com.anji.captcha", "com.wolfeyes"})
// SpringBoot应用入口的核心注解（包含自动配置@EnableAutoConfiguration等）
@SpringBootApplication
public class WolfeyesManageApplication extends SpringBootServletInitializer {

	/**
	 * @title slf4j日志对象
	 */
    //private static final Logger logger2 = LoggerFactory.getLogger(WolfeyesApplicationPro.class);
	//protected static Log logger2 = null; // Don't initialize early
	
	/**
	 * @title 参考文献：https://blog.csdn.net/qq_28988969/article/details/78135768
	 * @title 参考文献：https://blog.csdn.net/qq_32923745/article/details/78270835
	 * @title 若要部署到外部servlet容器，需要继承SpringBootServletInitializer，并重写configure()方法，
	 * @title 最后将Spring Boot的入口类设置进去。
	 * @descript springboot 部署
	 * @param SpringApplicationBuilder 编译器对象
	 * @author yanyljava
	 * @since 2018年07月12日下午4:37:39
	 * @return -
	 * @throws -
	 */
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    	// TODO Auto-generated method stub
        // 设置启动类,用于独立tomcat运行的入口
    	//return super.configure(builder);
    	//return builder.sources(WolfeyesApplicationPro.class);
    	return builder.sources(this.getClass());
    }
    
	/**
	 * @description 开发环境Dev启动类
	 * @param args JVM传入的通用参数数组
	 * @author yanyljava
	 * @since 2018年07月12日上午11:37:39
	 * @return -
	 * @throws -
	 */
	public static void main(String[] args) {
		
    	//wolfeyes默认启动方式
        //SpringApplication.run(WolfeyesManageApplication.class, args);
        
    	//获取springboot启动程序对象springApplication
        SpringApplication springApplication = new SpringApplication(WolfeyesManageApplication.class);
        //控制横幅banner是否开启，输出位置
        //设置banner mode为OFF关闭banner
        //springApplication.setBannerMode(Banner.Mode.OFF);
        //run启动程序
        springApplication.run(args);
        /*
        //run启动程序，并获取应用上下文ctx(ApplicationContext)
        ApplicationContext applicationContext = springApplication.run(args);
        
        // 获取此环境显式激活的配置文件集
        String[] activeProfiles = applicationContext.getEnvironment().getActiveProfiles();
        
        // Logger initialization is deferred in case a ordered
        // LogServletContextInitializer is being used
        //WolfeyesApplicationPro.logger2 = LogFactory.getLog(WolfeyesApplicationPro.class);
        
        // 遍历并打印此环境显式激活的配置文件集
        for(String activeProfile : activeProfiles) {
        	
        	//在启动spring boot应用时，打印正在使用的环境配置profile，避免配置错误。
        	//logger2.info("Spring Boot 使用activeProfile为：-{"+ activeProfile +"}");
        	logger2.warn("Spring Boot 使用profile为：-{}" , activeProfile);
        }
        */
        
        /*
        //获取所有定义的bean名称
        String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
        
        //遍历并打印所有定义的bean名称
        for(String beanDefinitionName : beanDefinitionNames) {
        	
        	//在启动spring boot应用时，打印已定义的bean名称
        	logger2.warn("Spring Boot beanDefinitionName：-{}" , beanDefinitionName);
        }
        */
		
        // SpringBoot单体应用启动成功的横幅提示（日志分界线，便于开发环境Dev的跟踪调试~）
		System.out.println("ヾ(◍°∇°◍)ﾉﾞ    wolfeyes启动成功      ヾ(◍°∇°◍)ﾉﾞ\n" + 
				
			"                     _    __                                                            _   _                  _     _                   \r\n" +
			"                    | |  / _|                                   /\\                     | | (_)                | |   (_)                  \r\n" +
			" __      __   ___   | | | |_    ___   _   _    ___   ___       /  \\     _ __    _ __   | |  _    ___    __ _  | |_   _    ___    _ __    \r\n" +
			" \\ \\ /\\ / /  / _ \\  | | |  _|  / _ \\ | | | |  / _ \\ / __|     / /\\ \\   | '_ \\  | '_ \\  | | | |  / __|  / _` | | __| | |  / _ \\  | '_ \\   \r\n" +
			"  \\ V  V /  | (_) | | | | |   |  __/ | |_| | |  __/ \\__ \\    / ____ \\  | |_) | | |_) | | | | | | (__  | (_| | | |_  | | | (_) | | | | |  \r\n" +
			"   \\_/\\_/    \\___/  |_| |_|    \\___|  \\__, |  \\___| |___/   /_/    \\_\\ | .__/  | .__/  |_| |_|  \\___|  \\__,_|  \\__| |_|  \\___/  |_| |_|  \r\n" +
			"                                       __/ |                           | |     | |                                                       \r\n" +
			"                                      |___/                            |_|     |_|                                                       \r\n" +
			"        _                    _                                                                      _                                    \r\n" +
			"       | |                  | |                                                                    | |                                   \r\n" +
			"  ___  | |_    __ _   _ __  | |_   _   _   _ __      ___   _   _    ___    ___    ___   ___   ___  | |                                   \r\n" +
			" / __| | __|  / _` | | '__| | __| | | | | | '_ \\    / __| | | | |  / __|  / __|  / _ \\ / __| / __| | |                                   \r\n" +
			" \\__ \\ | |_  | (_| | | |    | |_  | |_| | | |_) |   \\__ \\ | |_| | | (__  | (__  |  __/ \\__ \\ \\__ \\ |_|                                   \r\n" +
			" |___/  \\__|  \\__,_| |_|     \\__|  \\__,_| | .__/    |___/  \\__,_|  \\___|  \\___|  \\___| |___/ |___/ (_)                                   \r\n" +
			"                                          | |                                                                                            \r\n" +
			"                                          |_|                                                                                            ");
	}

}
